﻿namespace Ruandao.MiniAccess
{
    /// <summary>
    /// 对应数据库表的实体类型。
    /// </summary>
    public interface IEntity
    {
        /// <summary>
        /// 标记要删除的实体。
        /// 从数据中读出来的实体，标记为删除之后调用Save()方法时在数据库中删除记录。
        /// 不是从数据库中读出来的实体，标记为删除之后在调用Save()时不保存到数据库中。
        /// </summary>
        bool IsDelete { get; set; }

        /// <summary>
        /// 数据库中是否有对应的记录。
        /// </summary>
        bool IsNew { get; set; }

        /// <summary>
        /// 所有作为主键的属性名称。
        /// </summary>
        string[] KeyPropertyNames { get; }

        /// <summary>
        /// 保存实体。根据实体的状态，自动选择执行Delete/Update/Insert三个方法之一
        /// <br/>异常：EntityOperationException(发生SqlException异常，或者没有完成修改和删除的功能。)
        /// </summary>
        int Save();

    }
}
